package com.jay.serializer;

import com.jay.spi.SpiLoader;

/**
 * 序列化器工厂（工厂模式，用于获取序列化器对象）
 * 该工厂类用于提供序列化器的实例，基于Java SPI (Service Provider Interface)机制实现
 * 在静态初始化块中，它会加载所有的Serializer服务提供者，并在需要时提供具体的序列化器实例
 */
public class SerializerFactory {

    // 静态初始化块，用于加载所有的Serializer实现类
    static {
        SpiLoader.load(Serializer.class);
    }

    /**
     * 默认序列化器
     * 当没有指定具体的序列化器类型时，将使用该默认的序列化器
     */
    private static final Serializer DEFAULT_SERIALIZER = new JdkSerializer();

    /**
     * 获取实例
     * 根据提供的键值获取对应的序列化器实例如果找不到对应的序列化器，
     * 则返回默认的序列化器
     *
     * @param key 序列化器的键值，用于标识特定的序列化器实现
     * @return 对应键值的序列化器实例，如果找不到则返回默认的序列化器实例
     */
    public static Serializer getInstance(String key) {
        return SpiLoader.getInstance(Serializer.class, key);
    }

}
